package cn.edu.sjtu.software.sjtucontacts.activity;

import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

import cn.edu.sjtu.software.sjtucontacts.R;
import cn.edu.sjtu.software.sjtucontacts.model.Preference;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class SeparatedListAdapter extends BaseAdapter {   
  
    public final Map<String, Adapter> sections = new LinkedHashMap<String,Adapter>();   
    public final ArrayAdapter<String> headers;   
    public final static int TYPE_SECTION_HEADER = 0;   
    LayoutInflater inflater;
  
    public SeparatedListAdapter(Context context) {   
        headers = new ArrayAdapter<String>(context, R.layout.contactlistheader); 
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		
		ViewGroup root = (ViewGroup) inflater.inflate(R.layout.popup, null);
		TextView headText = (TextView) root.findViewById(R.id.list_header_title);
		switch(Preference.getInstance().getTheme()){
		case 0:
			//headText.setBackgroundColor();
			break;
		case 1:
			//headText.setBackgroundColor(0x00000000);
			break;
		case 2:
			break;
		case 3:
			break;
		};
    }   
  
    public void addSection(String section, Adapter adapter) {   
        this.headers.add(section);   
        this.sections.put(section, adapter);   
    }   
  
    public Object getItem(int position) {   
        for(Object section : this.sections.keySet()) {   
            Adapter adapter = sections.get(section);   
            int size = adapter.getCount() + 1;   
  
            // check if position inside this section   
            if(position == 0) return section;   
            if(position < size) return adapter.getItem(position - 1);   
  
            // otherwise jump into next section   
            position -= size;   
        }   
        return null;   
    }   
  
    public int getCount() {   
        // total together all sections, plus one for each section header   
        int total = 0;   
        for(Adapter adapter : this.sections.values())   
            total += adapter.getCount() + 1;   
        return total;   
    }   
  
    public int getViewTypeCount() {   
        // assume that headers count as one, then total all sections   
        int total = 1;   
        for(Adapter adapter : this.sections.values())   
            total += adapter.getViewTypeCount();   
        return total;   
    }   
  
    public int getItemViewType(int position) {   
        int type = 1;   
        for(Object section : this.sections.keySet()) {   
            Adapter adapter = sections.get(section);   
            int size = adapter.getCount() + 1;   
  
            // check if position inside this section   
            if(position == 0) return TYPE_SECTION_HEADER;   
            if(position < size) return type + adapter.getItemViewType(position - 1);   
  
            // otherwise jump into next section   
            position -= size;   
            type += adapter.getViewTypeCount();   
        }   
        return -1;   
    }   
  
    public boolean areAllItemsSelectable() {   
        return false;   
    }   
  
    public boolean isEnabled(int position) {   
        return (getItemViewType(position) != TYPE_SECTION_HEADER);   
    }   
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {   
        int sectionnum = 0;   
        for(Object section : this.sections.keySet()) {   
            Adapter adapter = sections.get(section);   
            int size = adapter.getCount() + 1;   
  
            // check if position inside this section   
            if(position == 0){
        		//TextView headText = (TextView) inflater.inflate(R.layout.contactlistheader, null);
            	TextView headText = (TextView)headers.getView(sectionnum, convertView, parent);
        		switch(Preference.getInstance().getTheme()){
        		case 0:
        			//headText.setBackgroundColor();
        			headText.setBackgroundColor(0xff191919);
        			break;
        		case 1:
        			headText.setBackgroundColor(0x40191919);
        			headText.setTextColor(0xffffffff);
        			break;
        		case 2:
        			headText.setBackgroundColor(0x40191919);
        			headText.setTextColor(0xffffffff);
        			break;
        		case 3:
        			headText.setBackgroundColor(0x40191919);
        			headText.setTextColor(0xffffffff);
        			break;
        		};
            	//return headers.getView(sectionnum, convertView, parent); 
        		return headText;
            }
            if(position < size) return adapter.getView(position - 1, convertView, parent);   
  
            // otherwise jump into next section   
            position -= size;   
            sectionnum++;   
        }   
        return null;   
    }   
  
    @Override  
    public long getItemId(int position) {   
        return position;   
    }   
    
    public void clear() {
    	headers.clear();
    	sections.clear();
    }

	/**
	 * @param name
	 */
	public void filter(String name) {
//		Set<String> keySet = sections.keySet();
//		Iterator<String> keyIterator = keySet.iterator();
//		ContactListAdapter adapter = null;
//		String section = null;
//		while (keyIterator.hasNext()) {
//			section = keyIterator.next();
//			adapter = (ContactListAdapter)sections.get(section);
//		}
		
	}
}  
